#include <concepts>
#include <iostream>

/* 1. 命名 concept → 一句话复用 */
template<typename T>
concept Addable = requires(T a, T b) { a + b; };

/* 2. requires 子句直接引用 concept */
template<typename T>
requires Addable<T>
T add1(T x, T y) { return x + y; }

/* 3. requires 子句里再写一个匿名 requires 表达式 */
template<typename T>
requires requires(T a, T b) { a + b; }   // 没名字，当场写
T add2(T x, T y) { return x + y; }

int main() {
    std::cout << add1(1,2) << '\n';
    std::cout << add2(1,2) << '\n';
}